/*
 *   FSWUniCEUB - 2008
 *   Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 *
 *   Para mais informações entre em contato com a coordenação do
 *   curso de Ciência da Computação da instituição.
 *   FSWUniCEUB - 2008
 * 
 */

package br.uniceub.fsw.talentos.bo;

import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.talentos.dao.HabilidadeDAO;
import br.uniceub.fsw.talentos.dao.HabilidadePerfilDAO;
import br.uniceub.fsw.talentos.vo.HabilidadeVO;
import br.uniceub.fsw.talentos.vo.HabilidadePerfilVO;
import java.util.List;

/**
 * Business Object da entidade Habilidade. Essa classe é responsável por todos as
 * funcionalidades de negócio relacionadas à entidade.
 * 
 @author   Bruno Henrique Sousa do Val
 *
 */
public class HabilidadeBO {

    HabilidadeDAO habilidadeDAO = new HabilidadeDAO();
    
    /**
     * Valida se já existe um registro de Habilidade no Banco de Dados como verificação para inserção.
     * 
     * @param habilidade habilidade a ser verificada.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso a habilidade 
     * informada não possua nome para a verificação ou já exista um Habilidade com o mesmo nome no banco de dados.
     */
    public void validarVOUnico(HabilidadeVO habilidade) throws NegocioException {
        
        if(habilidade.getNoHabilidade() == null || habilidade.getNoHabilidade().isEmpty())
            throw new NegocioException("Nome da Habilidade não foi informado");
        if(habilidade.getCdTipoHabilidade() == null)
            throw new NegocioException("Tipo da Habilidade não foi informado");
        
        HabilidadeVO habilidadeExemplo = new HabilidadeVO();
        habilidadeExemplo.setNoHabilidade(habilidade.getNoHabilidade());
        
        if(!habilidadeDAO.consultarPorExemplo(habilidadeExemplo).isEmpty())
            throw new NegocioException("Já existe uma Habilidade de nome " + habilidade.getNoHabilidade() +
                " na base de dados");
    }
    
    /**
     * Verifica se a habilidade está associada a algum perfil. Se positivo,
     * a habilidade não pode ser excluída.
     * 
     * @param habilidade habilidade a ser verificada.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso o objetivo 
     * esteja associado a um perfil.
     */
    public void validarExclusao(HabilidadeVO habilidade) throws Exception {
    
        HabilidadePerfilVO habilidadePerfilExemplo = new HabilidadePerfilVO();
        habilidadePerfilExemplo.setCdHabilidade(habilidade.getIdHabilidade());

        List<HabilidadePerfilVO> listHabilidadePerfil = new HabilidadePerfilDAO().consultarPorExemplo(habilidadePerfilExemplo);
                
        if(listHabilidadePerfil.size() > 0) 
             throw new NegocioException("A habilidade não pode ser excluída " +
                     "pois está associada a um Perfil");
    }
}